<?php

/**
 * Epart Sample Plugin Basic 라이브러리
 *
 * @package epartsample
 */

/**
 * 현재플러그인정보를 반환한다.
 *
 * @since 0.2
 * @return array 플러그인정보
 */
function esample_get_plugin_info() {
    $default_header = array(
        'Version' => 'Version'
    );    
    return $plugin_info = get_file_data(WP_PLUGIN_DIR."/".constant(EPART_PLUGIN_NAME_U."_PLUGIN_DIR_NAME") . "/".EPART_PLUGIN_NAME."-init.php", $default_header);
}

/**
 * 플러그인 업데이트 안내창을 표시한다.
 *
 * @since 0.2
 */
function esample_version_warning() {
    //if (isset($_GET["page"]) && $_GET["page"] == "ebbs-admin") {
    if (is_super_admin ()) {
        //최초에 옵션이 없을 경우 기본 버전 세팅한다.
        add_option(EPART_PLUGIN_NAME."_options", array(
            "version" => "0.0.1"
        ));
        //옵션테이블의 버전값이 플러그인 버전보다 낮으면 업데이트 메세지를 띄움
        $plugin_info = esample_get_plugin_info();
        $plugin_options = get_option(EPART_PLUGIN_NAME."_options");
        if (version_compare($plugin_info['Version'], $plugin_options["version"], ">")) {
            //안내메세지
            echo "<div id='".EPART_PLUGIN_NAME."_admin_warning' class='updated fade'>
                <p>";
            if (isset($_GET["page"]) && $_GET["page"] == EPART_PLUGIN_NAME."-admin") {
                echo "플러그인이 업데이트 되었습니다. 적용하려면 우측의 업데이트버튼을 클릭해주세요. <button id=\"".EPART_PLUGIN_NAME."_do_update_btn\" class=\"button\">업데이트 실행</button>";
            }else{                
                echo "플러그인이 업데이트 되었습니다. <a href='". get_bloginfo("wpurl") ."/wp-admin/admin.php?page=".EPART_PLUGIN_NAME."-admin' class='button'>샘플플러그인 관리로 이동</a>";
            }
            echo "</p>
            </div>";
        }
    }
}

//wp_ajax_xxxxx 관련 실행 함수는 전역범위에서 후크해줘야 함
//admin_ajax.php 파일이 관리자 전체에서 사용되기 때문인듯 하나 정확한 이유는 모르겠음.
add_action("wp_ajax_".EPART_PLUGIN_NAME."-version-update", EPART_PLUGIN_NAME."_version_update_callback");

/**
 * action : ebbs-version-update 에 해당하는 콜백 펑션<br />
 * 플러그인 업데이트를 수행한다.
 *
 * @since 0.2
 */
function esample_version_update_callback() {
    $plugin_info = esample_get_plugin_info();

    //nonce 검증
    check_ajax_referer(EPART_PLUGIN_NAME."-version-update-nonce");

    //플러그인 업데이트 권한 확인
    header("Content-Type: application/json");    
    if (current_user_can("manage_network")) {        
        //업데이트        
        esample_plugin_activate();
        
        //버전이 동일해지면 true 출력
        $plugin_options = get_option(EPART_PLUGIN_NAME."_options");

        if (version_compare($plugin_info['Version'], $plugin_options["version"], "=")) {
            die(json_encode(array("success" => true)));
        } else {
            die(json_encode(array("success" => false)));
        }
    } else {
        die(json_encode(array("success" => false)));
    }
}

/**
 * url rewrite rule 추가
 *
 * @author cwsong
 * @param array $rules 전역 url rewrite rules
 * @since 0.1
 * @return array url rewrite rule이 추가된 rule배열
 */
function esample_add_url_rewrite_rule($rules) {
    
    $newRules = array();
    //페이지번호 받기
    $newRules[EPART_PLUGIN_NAME."/es_pageno/([0-9]+)$"] = "index.php?pagename=".EPART_PLUGIN_NAME."&es_pageno=\$matches[1]";
    //뷰페이지 위한 row 번호 받기
    $newRules[EPART_PLUGIN_NAME."/([0-9]+)$"] = "index.php?pagename=".EPART_PLUGIN_NAME."&esno=\$matches[1]";

    return $newRules + $rules;
}

/**
 * 추가할 get 파라메터를 정의한다.
 *
 * @author cwsong
 * @since 0.1
 * @param array $vars 전역으로 정의된 get변수명 배열
 * @return array 플러그인에서 추가할 get변수가 추가된 배열
 */
function esample_add_query_vars($vars) {
    
    $vars[] = "es_pageno";
    $vars[] = "esno";
    
    return $vars;
}

/**
 * get 파라메터값을 구한다. 없으면 디폴트 값을 반환한다.<br />
 * 디폴트값을 넣지 않았을 경우 키에 매치되는 값이 없으면 null을 반환한다.
 *
 * @author cwsong
 * @since 0.1
 * @param string $var get_query_var로 구할 변수 키값
 * @param int $defaultVal 디폴트값
 * @return object get 파라메터의 값
 */
function esample_get_query_var($var, $defaultVal = null) {
    $temp = get_query_var($var);
    if ($temp != null && $temp != "") {
        return $temp;
    }
    return $defaultVal;
}

/**
 * 사용자 페이지
 *
 * @author cwsong
 * @since 0.2
 * @param array $params shortcode 세팅 파라메터
 * @return string 페이지콘텐츠내용
 */
function esample_do_shortcode($params) {
    $result = '<div id="'.EPART_PLUGIN_NAME.'-wrapper">';

    $esNo = esample_get_query_var("esno");   

    ob_start();
    if ($esNo != null) {
        include_once constant(EPART_PLUGIN_NAME_U."_PLUGIN_DIR") . "/".EPART_PLUGIN_NAME."-view.php";
    } else {
        include_once constant(EPART_PLUGIN_NAME_U."_PLUGIN_DIR") . "/".EPART_PLUGIN_NAME."-list.php";
    }
    $result .= ob_get_contents();
    ob_end_clean();

    $result .= '</div>';
    return $result;
}

/**
 * 플러그인 활성화 후크함수<br />
 *
 * 플러그인 최초 활성화시 테이블을 생성한다.<br />
 * 스키마 구조변경시 ebbs-init.php의 플러그인 헤더의 버전(Version: 0.x.x)을 업해주거나,<br />
 *
 * @author cwsong
 * @since 0.2
 * @global object $wpdb 워드프레스 DB관리 객체
 */
function esample_plugin_activate() {
    
    if (is_super_admin()) {        
        global $wpdb; //, $user_level, $wpforumadmin;

        $plugin_table_name = "wp_".EPART_PLUGIN_NAME;
        $plugin_info = esample_get_plugin_info();
        $plugin_options = get_option(EPART_PLUGIN_NAME."_options");
        $needsUpdate = version_compare($plugin_info["Version"], $plugin_options["version"], ">");

        if ($needsUpdate) {            
            //dbDelta사용하기 위해 인클루드
            require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
            $progress_default_field = '';
            $plugin_table_query = "
                 CREATE TABLE {$plugin_table_name} (
                  es_no int(11) NOT NULL auto_increment COMMENT '아이디 PK',
                  es_name varchar(150) NOT NULL COMMENT '이름 FK',
                  es_title varchar(255) NOT NULL COMMENT '제목 FK',
                  es_regdate datetime NOT NULL COMMENT '등록일 FK',
                  PRIMARY KEY  (es_no)
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
              ";
            //테이블 생성
            dbDelta($plugin_table_query);

            //플러그인 버전을 업데이트
            if ($needsUpdate) {                
                $plugin_options["version"] = $plugin_info['Version'];
                update_option(EPART_PLUGIN_NAME."_options", $plugin_options);
            }
        }
    }
}

/**
 * 플러그인 비활성화후크 실행 함수
 *
 * @author cwsong
 * @since 0.1
 */
function esample_plugin_deactivate() {

}


?>
